package com.woniu.aimd.controller;

import com.woniu.aimd.pojo.DTO.LinearAlgebraQuiz2;
import com.woniu.aimd.pojo.entity.SingAnswerQuestion;
import com.woniu.aimd.util.ResultObj;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

//@CrossOrigin(origins = "*")
@RestController
@RequestMapping("ai")
public class answerQuestionController {

    private static final Logger logger = LoggerFactory.getLogger(answerQuestionController.class);

    @Resource
    @Qualifier( "deepSeekChatClientYMH")
    private ChatClient deepSeekChatClientYMH;

    @PostMapping("answerquestions")
    public ResultObj<LinearAlgebraQuiz2> generateQuestions(
            @RequestParam(defaultValue = "5") Integer num,
            @RequestParam(defaultValue = "") String questionclass) {

        if (num == null || num <= 0 || num > 50) {
            return ResultObj.error(400, "题目数量应为 1 到 50 之间");
        }

        if (questionclass == null || questionclass.isBlank()) {
            return ResultObj.error(400, "题目类型不能为空");
        }

        try {
            LinearAlgebraQuiz2 quiz = generateQuiz(num, questionclass);
            return ResultObj.success(quiz);
        } catch (Exception e) {
            logger.error("生成题目失败: {}", e.getMessage(), e);
            return ResultObj.error(500, "生成题目失败，请稍后再试");
        }
    }
    //@PostMapping("getscore")
    public ResultObj<Integer> getscore(
            @RequestParam String header,
            @RequestParam String rightanswer,
            @RequestParam String youranswer) {

        if (header == null ) {
            return ResultObj.error(400, "题干不能为空");
        }

        if (rightanswer == null ) {
            return ResultObj.error(400, "正确答案不能为空");
        }
        if (youranswer == null ) {
            return ResultObj.error(400, "你的答案不能为空");
        }

        try {
            Integer score = myscore(header, rightanswer,youranswer);
            return ResultObj.success(score);
        } catch (Exception e) {
            logger.error("生成分数失败: {}", e.getMessage(), e);
            return ResultObj.error(500, "生成分数失败，请稍后再试");
        }
    }
    @PostMapping("getscore")
    public List<Integer> getscores(
            @RequestBody List<SingAnswerQuestion>answerquestion
            ){
        List<Integer> scores = new ArrayList<Integer>();
        for (int i=0;i<answerquestion.size();i++) {
            String header=answerquestion.get(i).getHeader();
            String rightanswer=answerquestion.get(i).getRightanswer();
            String youranswer=answerquestion.get(i).getYouranswer();
            Integer score = myscore(header, rightanswer,youranswer);
            scores.add(score);
        }
        return scores;}

    private LinearAlgebraQuiz2 generateQuiz(int num, String questionclass) {
        String promptText = String.format("""
            请你生成 %d 道关于【%s】的解答题，并以严格的 JSON 格式返回：
            {
                "questions": [
                    {
                        "header": "问题内容"
                        "rightanswer": “正确的答案”
                    }
                ]
            }
            要求：
            1. JSON 严格符合结构，不添加注释或解释说明
            3. 问题内容和正确答案字数控制在200个字数以内,除了专业术语外，其他都是中文
            4. 不要包含 markdown 或代码块标记
            5. 输出必须是纯 JSON（不包含额外文字）
            6.“正确的答案”和"问题内容"可以稍微详细一点，字数多一点
            7.题目可以搞点实际开发中的场景题
            """, num, questionclass);

        logger.info("Prompt sent to AI: {}", promptText);

        return deepSeekChatClientYMH.prompt()
                .user(u -> u.text(promptText))
                .call()
                .entity(LinearAlgebraQuiz2.class);
    }
    private Integer myscore(String header, String rightanswer,String youranswer) {
        String promptText = String.format("""
            题目是 【%s】 ，它的答案是【%s】，我的答案是 【%s】，综合判断，你认为我能得多少分？
            请只输出一个0-100的数字来表示我的得分就可以了，其他什么都不要
            """,header, rightanswer,youranswer);

        logger.info("Prompt sent to AI: {}", promptText);

        return deepSeekChatClientYMH.prompt()
                .user(u -> u.text(promptText))
                .call()
                .entity(Integer.class);
    }
}
